/**
 */
package fUML.Semantics.Classes.Kernel;

import fUML.Semantics.Loci.LociL1.Locus;
import fUML.Semantics.Loci.LociL1.SemanticVisitor;

import fUML.Syntax.Classes.Kernel.ValueSpecification;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Evaluation</b></em>'.
 * <!-- end-user-doc -->
 *
 * <!-- begin-model-doc -->
 * An evaluation is used to evaluate a value specification to produce a
 *               value.
 * <!-- end-model-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link fUML.Semantics.Classes.Kernel.Evaluation#getSpecification <em>Specification</em>}</li>
 *   <li>{@link fUML.Semantics.Classes.Kernel.Evaluation#getLocus <em>Locus</em>}</li>
 * </ul>
 * </p>
 *
 * @see fUML.Semantics.Classes.Kernel.KernelPackage#getEvaluation()
 * @model abstract="true"
 * @generated
 */
public interface Evaluation extends SemanticVisitor {
	/**
	 * Returns the value of the '<em><b>Specification</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * The value specification to be evaluated.
	 * <!-- end-model-doc -->
	 * @return the value of the '<em>Specification</em>' reference.
	 * @see #setSpecification(ValueSpecification)
	 * @see fUML.Semantics.Classes.Kernel.KernelPackage#getEvaluation_Specification()
	 * @model required="true" ordered="false"
	 * @generated
	 */
	ValueSpecification getSpecification();

	/**
	 * Sets the value of the '{@link fUML.Semantics.Classes.Kernel.Evaluation#getSpecification <em>Specification</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Specification</em>' reference.
	 * @see #getSpecification()
	 * @generated
	 */
	void setSpecification(ValueSpecification value);

	/**
	 * Returns the value of the '<em><b>Locus</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * The locus at which this evaluation is taking place.
	 * <!-- end-model-doc -->
	 * @return the value of the '<em>Locus</em>' reference.
	 * @see #setLocus(Locus)
	 * @see fUML.Semantics.Classes.Kernel.KernelPackage#getEvaluation_Locus()
	 * @model required="true" ordered="false"
	 * @generated
	 */
	Locus getLocus();

	/**
	 * Sets the value of the '{@link fUML.Semantics.Classes.Kernel.Evaluation#getLocus <em>Locus</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Locus</em>' reference.
	 * @see #getLocus()
	 * @generated
	 */
	void setLocus(Locus value);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * Evaluate the specification, returning the resulting value.
	 *  
	 * <!-- end-model-doc -->
	 * @model ordered="false"
	 * @generated
	 */
	Value evaluate();

} // Evaluation
